package aidevelopment;

import ui.OthelloUserInterface;

public class Bord {

	private int[][] bord;
	
	public Bord(int hoogte,int breedte){
		bord = new int[breedte][hoogte];
		for(int i = 0;i < breedte;i++){
			for(int j = 0;j < hoogte;j++){
				voegToe(i,j,0);
			}
		}
	}
	public Bord(){
		bord = new int[Orthello.BREEDTE][Orthello.HOOGTE];
		for(int i = 0;i < Orthello.BREEDTE;i++){
			for(int j = 0;j < Orthello.HOOGTE;j++){
				voegToe(i,j,0);
			}
		}
	}

	
	public ZetRij checkMogelijkeZetten(int kleur){
		ZetRij resultaat = new ZetRij(Orthello.BREEDTE*Orthello.HOOGTE);
		for(int i = 0;i < Orthello.BREEDTE;i++){
			for(int j = 0;j < Orthello.HOOGTE;j++){
				if(geefWaarde(i, j) == OthelloUserInterface.LEEG){
					Coordinaat c = new Coordinaat(i,j);
					if(checkTussenliggendeStenen(c,kleur).geefAantalCoordinaten() > 0){
						
						resultaat.addMoveToMoveRow(new Zet(c, checkTussenliggendeStenen(c,kleur)));
					}
				}
			}
		}
		return resultaat;
	}
	
	public CoordinaatRij checkTussenliggendeStenen(Coordinaat klik,int kleur){
		CoordinaatRij tussenliggendeStenen = new CoordinaatRij(Orthello.BREEDTE*Orthello.HOOGTE);
		if(geefWaarde(klik) == OthelloUserInterface.LEEG){
			for(int i = 0;i < Richting.RICHTINGEN.length;i++){
				CoordinaatRij tmpCR = checkRichting(i,klik,kleur);
				tussenliggendeStenen.voegCoordinaatRijToe(tmpCR);
			}
		}
		return tussenliggendeStenen;
	}

	public CoordinaatRij checkRichting(int i,Coordinaat klikBackup,int kleur){
		CoordinaatRij tussenliggendEenRichting = new CoordinaatRij(Orthello.BREEDTE*Orthello.HOOGTE);
		Coordinaat klik = new Coordinaat(klikBackup.geefX(),klikBackup.geefY());


		klik.transleer(Richting.RICHTINGEN[i]);
		while(klik.geefX() < Orthello.BREEDTE 		&& klik.geefY() < Orthello.HOOGTE 
				&& 	klik.geefX() >= 0 		&& klik.geefY() >= 0){

			int kleurCheck = geefWaarde(klik);
			if(kleurCheck == geefInverseKleur(kleur)){
				tussenliggendEenRichting.voegToe(new Coordinaat(klik.geefX(), klik.geefY()));
			}
			else if(kleurCheck == kleur){
				if(tussenliggendEenRichting.geefAantalCoordinaten() > 0){
					return tussenliggendEenRichting;
				}
				else{
					return new CoordinaatRij(0);
				}
			}
			else if(kleurCheck == OthelloUserInterface.LEEG){
				return new CoordinaatRij(0);
			}
			klik.transleer(Richting.RICHTINGEN[i]);
		}
		return new CoordinaatRij(0);

	}
	
	public int geefInverseKleur(int kleur){
		if(kleur == OthelloUserInterface.ZWART)			return OthelloUserInterface.WIT;
		else if (kleur == OthelloUserInterface.LEEG)	return OthelloUserInterface.LEEG;
		else 											return OthelloUserInterface.ZWART;

	}
	
	public void voegToe(Coordinaat coordinaat, int waarde){
		bord[coordinaat.geefX()][coordinaat.geefY()] = waarde;
	}
	
	public void voegToe(int x,int y, int waarde){
		bord[x][y] = waarde;
	}
	
	public int geefWaarde(Coordinaat coordinaat){
		return bord[coordinaat.geefX()][coordinaat.geefY()];
	}
	
	public int geefWaarde(int x,int y){
		return bord[x][y];
	}
	
	public int geefHoogte(){
		return bord[0].length;
	}
	
	public int geefLengte(){
		return bord.length;
	}
	
	
}
